package com.css.sword.knowing.search.aggregation;

import java.util.List;

/**
 * 分组统计（桶）运算属性类
 */
public class AggBucket {
    private int type;

    private String field;
    private List<AggBucket> aggBuckets;
    private String aggName;
    private long interval; // 普通直方图间隔
    private int dateIntervalType; // 日期直方图间隔类型
    private int customerDateIntervalValue; // 日期直方图间隔值
    private List<AggMetrics> aggMetricses;
    private int size;
    private int order = -1; // 对分组结果按字段值进行排序。0：降序排列， 1：降序排列， -1：按统计结果数进行排序

    /**
     * 获取需指标统计运算的属性列表
     * 
     * @return AggMetrics列表
     */
    public List<AggMetrics> getAggMetricses() {
        return aggMetricses;
    }

    /**
     * 设置指标统计运算的属性列表
     * 
     * @param aggMetricses
     *            AggMetrics列表
     */
    public void setAggMetricses(List<AggMetrics> aggMetricses) {
        this.aggMetricses = aggMetricses;
    }

    /**
     * 获取统计类型
     * 
     * @return 统计类型
     */
    public int getType() {
        return type;
    }

    /**
     * 设置统计类型，取值为SearchConst中：
     * AGG_TYPE_TERMS，AGG_TYPE_HISTOGRAM，AGG_TYPE_DATE_HISTOGRAM
     * 
     * @param type
     *            统计类型
     */
    public void setType(int type) {
        this.type = type;
    }

    /**
     * 获取普通直方图间隔
     * 
     * @return 普通直方图间隔
     */
    public long getInterval() {
        return interval;
    }

    /**
     * 设置普通直方图间隔
     * 
     * @param interval
     *            普通直方图间隔
     */
    public void setInterval(long interval) {
        this.interval = interval;
    }

    /**
     * 获取日期直方图类型
     * 
     * @return 日期直方图类型
     */
    public int getDateIntervalType() {
        return dateIntervalType;
    }

    /**
     * 设置日期直方图类型
     * 
     * @param dateIntervalType
     *            日期直方图类型
     */
    public void setDateIntervalType(int dateIntervalType) {
        this.dateIntervalType = dateIntervalType;
    }

    /**
     * 获取日期直方图间隔
     * 
     * @return 日期直方图间隔
     */
    public int getCustomerDateIntervalValue() {
        return customerDateIntervalValue;
    }

    /**
     * 设置日期直方图间隔
     * 
     * @param customerDateIntervalValue
     *            日期直方图间隔
     */
    public void setCustomerDateIntervalValue(int customerDateIntervalValue) {
        this.customerDateIntervalValue = customerDateIntervalValue;
    }

    /**
     * 获取分组运算自定义名称
     * 
     * @return 自定义名称
     */
    public String getAggName() {
        return aggName;
    }

    /**
     * 设置分组运算自定义名称
     * 
     * @param aggName
     *            自定义的名称
     */
    public void setAggName(String aggName) {
        this.aggName = aggName;
    }

    /**
     * 获取多维度的分组列表
     * 
     * @return AggBucket列表
     */
    public List<AggBucket> getAggBuckets() {
        return aggBuckets;
    }

    /**
     * 设置多维度的分组列表，在已有的统计基础上再进行多维度统计
     * 
     * @param aggBuckets
     *            AggBucket列表
     */
    public void setAggBuckets(List<AggBucket> aggBuckets) {
        this.aggBuckets = aggBuckets;
    }

    /**
     * 获取分组字段名称
     * 
     * @return 分组字段名称
     */
    public String getField() {
        return field;
    }

    /**
     * 设置分组字段名称
     * 
     * @param field
     *            分组字段的名称
     */
    public void setField(String field) {
        this.field = field;
    }

    /**
     * 获取分组结果数目
     * 
     * @return 结果数目
     */
    public int getSize() {
        return size;
    }

    /**
     * 设置返回分组结果数目
     * 
     * @param size
     */
    public void setSize(int size) {
        this.size = size;
    }

    /**
     * 获取分组排序方式
     * 
     * @return 分组排序方式
     */
    public int getOrder() {
        return order;
    }

    /**
     * 设置分组排序方式，取值为：SearchConst中SEARCH_ORDER_TYPE_DESC或SEARCH_ORDER_TYPE_ASC
     * 时，按分组字段进行排序。不设置此属性或者设置为-1时，按分组数目倒序排列
     * 
     * @param order
     *            分组排序方式，默认值为：-1
     */
    public void setOrder(int order) {
        this.order = order;
    }
}
